package com.metaboot.demo.service.impl;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.metaboot.common.annotation.DataSource;
import com.metaboot.common.core.page.PageUtils;
import com.metaboot.common.core.page.TableDataInfoPlus;
import com.metaboot.common.enums.DataSourceType;
import com.metaboot.common.utils.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.metaboot.demo.mapper.DemoSingleMapper;
import com.metaboot.demo.domain.DemoSingle;
import com.metaboot.demo.service.IDemoSingleService;

/**
 * 单表演示Service业务层处理
 * 
 * @author theodo
 * @date 2021-12-01
 */
//@DataSource(DataSourceType.SLAVE) // 演示切换从库查询
@Service
public class DemoSingleServiceImpl extends ServiceImpl<DemoSingleMapper, DemoSingle> implements IDemoSingleService {

	@Autowired
	private DemoSingleMapper demoSingleMapper;

	/**
	 * 查询单表演示
	 * 
	 * @param id 单表演示主键
	 * @return 单表演示
	 */
	@Override
	public DemoSingle selectDemoSingleById(Long id) {
		return demoSingleMapper.selectById(id);
	}
	
	/**
	 * 获取查询条件
	 * 
	 * @param demoSingle 单表演示
	 * @return 单表演示
	 */
	@SuppressWarnings("unused")
	private LambdaQueryWrapper<DemoSingle> buildQueryWrapper(DemoSingle demoSingle) {
        Map<String, Object> params = demoSingle.getParams();
        LambdaQueryWrapper<DemoSingle> lqw = Wrappers.lambdaQuery();
        lqw.like(StringUtils.isNotBlank(demoSingle.getName()), DemoSingle::getName, demoSingle.getName());
        lqw.eq(StringUtils.isNotBlank(demoSingle.getStatus()), DemoSingle::getStatus, demoSingle.getStatus());
        return lqw;
    }

	/**
	 * 查询单表演示列表
	 * 
	 * @param demoSingle 单表演示
	 * @return 单表演示
	 */
	@Override
	public List<DemoSingle> selectDemoSingleList(DemoSingle demoSingle) {
		return demoSingleMapper.selectList(buildQueryWrapper(demoSingle));
	}
	
	/**
     * 查询单表演示列表-分页查询
     * 
     * @param demoSingle 单表演示
     * @return 单表演示集合
     */
	//@DataSource(DataSourceType.SLAVE) // 演示切换从库查询
	@Override
	public TableDataInfoPlus<DemoSingle> selectPageDemoSingleList(DemoSingle demoSingle) {
		return PageUtils.buildDataInfo(page(PageUtils.buildPage(), buildQueryWrapper(demoSingle)));
	}

	/**
     * 查询单表演示列表-自定义分页查询-适用于多表联合查询
     * 
     * @param demoSingle 单表演示
     * @return 单表演示集合
     */
	@Override
	public TableDataInfoPlus<DemoSingle> selectMultiPageDemoSingleList(DemoSingle demoSingle) {
		return PageUtils.buildDataInfo(demoSingleMapper.selectMultiPageDemoSingleList(PageUtils.buildPage(), demoSingle));
	}

	/**
	 * 新增单表演示
	 * 
	 * @param demoSingle 单表演示
	 * @return 结果
	 */
	@Override
	public int insertDemoSingle(DemoSingle demoSingle) {
		return demoSingleMapper.insert(demoSingle);
	}

	/**
	 * 修改单表演示
	 * 
	 * @param demoSingle 单表演示
	 * @return 结果
	 */
	@Override
	public int updateDemoSingle(DemoSingle demoSingle) {
		return demoSingleMapper.updateById(demoSingle);
	}

	/**
	 * 批量删除单表演示
	 * 
	 * @param ids 需要删除的单表演示主键
	 * @return 结果
	 */
	@Override
	public int deleteDemoSingleByIds(Collection<Long> ids) {
		return demoSingleMapper.deleteBatchIds(ids);
	}

	/**
	 * 删除单表演示信息
	 * 
	 * @param id 单表演示主键
	 * @return 结果
	 */
	@Override
	public int deleteDemoSingleById(Long id) {
		return demoSingleMapper.deleteById(id);
	}

}
